package 双指针法;

public class No11盛最多水的容器 {

    /**
     * 给你 n 个非负整数 a1，a2，...，an，每个数代表坐标中的一个点 (i, ai) 。
     * 在坐标内画 n 条垂直线，垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。
     * 找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。
     *
     * 说明：你不能倾斜容器，且 n 的值至少为 2。
     */



    public static int maxArea(int[] height) {

        /**
         * 双指针解法,两个指针分别指向头和尾,然后计算容积比较记录最大值
         * 每次都移动指向数值小的那个,继续计算,
         * 临界条件是:两个指针不相等
         */
        int left=0;
        int right=height.length-1;
        int width=height.length-1;
        int result=0;

        while(left!=right){

            int ret=Math.min(height[left],height[right]);
            result=Math.max(ret*width,result);

            if(height[left]>=height[right]){
                //左边比较长,就移动右边的
                right--;
                width--;
            }else{
                //右边比较长,就移动左边的
                left++;
                width--;
            }

        }

        return result;
    }


    //低级解法,两个for
    public static int maxAreaLow(int[] height) {
        int result=0;
        //我先用for来写,两个for,x单位是1,y的单位就是数组
        for(int i=0;i<height.length;i++){
            for(int j=i+1;j<height.length;j++){
                //找出最大的那个
                int ret=Math.min(height[i],height[j]);
                result=Math.max(ret*(j-i),result);
            }
        }
        return result;
    }

    public static void main(String[] args) {

        int[] arr=new int[]{1,8,6,2,5,4,8,3,7};
        int i = maxArea(arr);
        System.out.println(i);

    }

}
